package xdb.util;

import com.goldhuman.Common.Marshal.OctetsStream;

/**
 * 自增长Key接口。
 * <p>
 * 实现必须正确实现 equals, hashCode
 *
 * @param <T>
 * @author lichenghua
 */

public interface AutoKey<T> {

    T next();

    T current();

    String getName();

    // marshal 编码格式: 类型编号(byte) + 自定义数据(...).
    OctetsStream marshal(OctetsStream os);

    /**
     * 检查key是否正确。
     * 如果需要调整自增长种子。
     *
     * @param key
     * @throws IllegalArgumentException if key is bad.
     */
    void accept(T key);
}
